//
//  UIImage+MinImage.m
//  KMedicine
//
//  Created by song on 16/7/8.
//  Copyright © 2016年 caomu. All rights reserved.
//

#import "UIImage+MinImage.h"

@implementation UIImage (MinImage)


+ (UIImage *)getMinImage:(UIImage *)drawImg ifNeedDrawSize:(CGSize)drawSize{
    
    
    /*==============开启图片上下文==============*/
    
    CGSize realSize = drawImg.size;
    
    // 计算 图片 的宽高比
    CGFloat realSizeHW = realSize.width / realSize.height;
    
    
    // 模拟 用户 定义的宽高
    CGSize userWidHei  = drawSize;
    
    // 如果 有指定 高度 跟宽度   就用指定的宽度
    
    CGSize clipImgSize = CGSizeZero;
    
    // 取到 图片 最小 的  宽 或 高
    CGFloat minWH = MIN(realSize.width, realSize.height);
    CGFloat maxWH = MAX(realSize.width, realSize.height);
    
    // 判断 用户 是否有 指定 图片的大小
    if (userWidHei.width && userWidHei.height) {
        
        // 直接采用 用户 指定的 剪裁 大小
        clipImgSize = userWidHei;
        
        
    } else {
        
        // 用户没有指定的话  就根据图片的最小边 定义 正方形 上下文
        
        // 因为 大图会严重占用内存 空间 所以 需要 限制 上下文的宽高   如果用户没有 指定 就 需要 根据 图片的 大小 做对应的 更改
        if (minWH > [UIScreen mainScreen].bounds.size.width) {
            
            // 大于 屏幕的 宽度  就将 图片的  最小边 直接 等于 屏幕的宽度
            minWH = [UIScreen mainScreen].bounds.size.width;
            // 最大边 就根据 宽高比例 做相对应的 改变
            maxWH = [UIScreen mainScreen].bounds.size.width * maxWH / minWH;
            
            clipImgSize = CGSizeMake(minWH, minWH);
            
            // 判断 谁是最小边 宽or高
            if (realSizeHW > 1) {
                
                realSize = CGSizeMake(maxWH, minWH);
            } else {
                
                realSize = CGSizeMake(minWH, maxWH);
            }
            
        } else {
            
            // 否者 直接 用 图片的 最小边
            clipImgSize = CGSizeMake(minWH, minWH);
        }
    }
    
    // 开启图片上下文  指定图片上下文的宽高
    UIGraphicsBeginImageContextWithOptions(clipImgSize, NO, 0);
    
    // 根据用户给出 的 size 做等比例 缩放
    CGFloat cpH = clipImgSize.width;
    CGFloat cpW = clipImgSize.height;
    
    // 计算 图片 绘制 的 点
    CGFloat Wx = 0;
    CGFloat Hy = 0;
    
    // 如果 宽度  需要 裁剪view 的高度大于宽度
    if (clipImgSize.height >= clipImgSize.width) {
        
        cpH = realSize.height * ( clipImgSize.height / realSize.height);
        cpW = cpH * realSizeHW;
        
        Wx = cpH - cpW;
        Hy = 0;
        
    } else {
        
        // 裁剪view 的大于宽度高度
        cpW = realSize.width * ( clipImgSize.width / realSize.width);
        cpH = cpW * (realSize.height / realSize.width);
        
        Wx = 0;
        Hy = (cpH - cpW)/2;
        
    }
    
    // 把图片绘制到上下文    Rect 就是相当于  将图片   塞进 指定的 frame.size 里, 然后 放在 上下文 frame.origin 位置  再绘制到上下文中
    [drawImg drawInRect:CGRectMake(Wx, Hy, cpW , cpH)];
    
    // 从当前的图片上下文剪裁成图片
    return UIGraphicsGetImageFromCurrentImageContext();

}
@end
















